package com.fjnu.dao;

import com.fjnu.domain.entity.Article;

import java.time.LocalDateTime;
import java.util.List;

public interface ArticleDao {
    
    /**
     * 新增文章
     * @param article 文章对象
     * @return 插入成功返回1，失败返回0
     */
    int insert(Article article);
    
    /**
     * 更新文章内容
     * @param id 文章ID
     * @param newContent 新内容
     * @return 更新成功返回1，失败返回0
     */
    int updateContent(Integer id, String newContent);

    int updateStatus(Integer id, Integer newStatus);
    
    /**
     * 更新文章标题
     * @param id 文章ID
     * @param newTitle 新标题
     * @return 更新成功返回1，失败返回0
     */
    int updateTitle(Integer id, String newTitle);
    
    /**
     * 删除文章
     * @param id 文章ID
     * @return 删除成功返回1，失败返回0
     */
    int deleteById(Integer id);
    
    /**
     * 按照用户id查询文章
     * @param userId 用户ID
     * @return 按照创建时间的降序文章列表，若无结果则返回null
     */
    List<Article> selectByUserId(Integer userId);
    
    /**
     * 按照文章title或内容的关键词模糊查询
     * @param keyword 关键词
     * @return 按照创建时间的降序文章列表，若无结果则返回null
     */
    List<Article> selectByKeyWord(String keyword);
    
    /**
     * 按照文章的创建时间的时间区间进行查询
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 按照创建时间的降序文章列表，若无结果则返回null
     */
    List<Article> selectByTimePeriod(LocalDateTime startTime, LocalDateTime endTime);
    
    /**
     * 按照文章的标签对文章进行查询
     * @param tagId 标签ID
     * @return 按照创建时间的降序文章列表，若无结果则返回null
     */
    List<Article> selectByTag(Integer tagId);


    Article selectById(Integer id) ;
    
    /**
     * 按照文章的类别进行查询
     * @param categoryId 分类ID
     * @return 按照创建时间的降序文章列表，若无结果则返回null
     */
    List<Article> selectByCategory(Integer categoryId);
}